package tests;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.TreeMap;

import org.junit.Test;
import org.openstreetmap.gui.jmapviewer.Coordinate;

import capaGrafica.Fecha;
import capaNegocio.Inteligencia;
import capaNegocio.PedidoCliente;

public class TestInteligencia {
	
	
	@SuppressWarnings("static-access")
	@Test
	public void testAgregarPedidos()
	{	
		Inteligencia nueva= new Inteligencia();
		
		assertEquals(0, nueva.getListaPedidos().size());
	}
	
	@SuppressWarnings("static-access")
	@Test
	public void testAgregarPedidos2() 
	{	
		
		Inteligencia prueba= new Inteligencia();

		PedidoCliente a= new PedidoCliente("Alan", new Coordinate(5,5), new Fecha(2014, 11, 24));
		PedidoCliente b= new PedidoCliente("Mario", new Coordinate(10,10), new Fecha(2014, 11, 24));
		PedidoCliente c= new PedidoCliente("Ezequiel", new Coordinate(100,100), new Fecha(2014, 11, 24));
		prueba.agregarPedido(a);
		prueba.agregarPedido(b);
		prueba.agregarPedido(c);
		
		assertEquals(3, prueba.getListaPedidos().size());
	}
	
	@SuppressWarnings("static-access")
	@Test
	public void testEliminarPedidos()
	{
		Inteligencia prueba= new Inteligencia();
		
		PedidoCliente a= new PedidoCliente("Alan", new Coordinate(5,5), new Fecha(2014, 11, 24));
		PedidoCliente b= new PedidoCliente("Mario", new Coordinate(10,10), new Fecha(2014, 11, 24));
		PedidoCliente c= new PedidoCliente("Ezequiel", new Coordinate(100,100), new Fecha(2014, 11, 24));
		
		prueba.agregarPedido(a);
		prueba.agregarPedido(b);
		prueba.agregarPedido(c);

		prueba.eliminarPedido(a);
		prueba.eliminarPedido(b);

		assertEquals(1, prueba.getListaPedidos().size());
	}

	@SuppressWarnings("static-access")
	@Test
	public void testEliminarPedidos2()
	{
		Inteligencia prueba= new Inteligencia();
		
		PedidoCliente a= new PedidoCliente("Alan", new Coordinate(5,5), new Fecha(2014, 11, 24));
		
		prueba.agregarPedido(a);

		prueba.eliminarPedido(a);
		
		assertEquals(0, prueba.getListaPedidos().size());
	}
	
	@SuppressWarnings("static-access")
	@Test
	public void testDamePedidosFecha()
	{
		// RECORDAR QUE SIEMPRE TIENE UNO MAS QUE LOS QUE SE AGREGAN PORQUE ESTA EL PUNTO PARTIDA QUE ES FACULTAD
		
		Inteligencia prueba= new Inteligencia();
		
		PedidoCliente a= new PedidoCliente("Alan", new Coordinate(5,5), new Fecha(2014, 11, 24));
		PedidoCliente b= new PedidoCliente("Carlos", new Coordinate(8,8), new Fecha(2014, 11, 24));
		PedidoCliente c= new PedidoCliente("Juan", new Coordinate(15,15), new Fecha(2014, 11, 25));
		PedidoCliente d= new PedidoCliente("Ignacio", new Coordinate(10,12), new Fecha(2014, 11, 25));
		PedidoCliente e= new PedidoCliente("Javier", new Coordinate(100,150), new Fecha(2014, 11, 25));

		
		prueba.agregarPedido(a);
		prueba.agregarPedido(b);
		prueba.agregarPedido(c);
		prueba.agregarPedido(d);
		prueba.agregarPedido(e);

		
		Fecha nueva= new Fecha(2014, 11, 25);
		
		ArrayList<PedidoCliente> pedidosFecha= prueba.damePedidosFecha(nueva);
		
		assertEquals(4, pedidosFecha.size());
		assertFalse(pedidosFecha.contains(a));
		assertFalse(pedidosFecha.contains(b));
		assertTrue(pedidosFecha.contains(c));
		assertTrue(pedidosFecha.contains(d));
		assertTrue(pedidosFecha.contains(e));
	}
	
	@SuppressWarnings("static-access")
	@Test
	public void testDamePedidosFecha2()
	{
		// RECORDAR QUE SIEMPRE TIENE UNO MAS QUE LOS QUE SE AGREGAN PORQUE ESTA EL PUNTO PARTIDA QUE ES FACULTAD
		
		Inteligencia prueba= new Inteligencia();
		
		PedidoCliente a= new PedidoCliente("Alan", new Coordinate(5,5), new Fecha(2014, 11, 24));
		PedidoCliente b= new PedidoCliente("Carlos", new Coordinate(8,8), new Fecha(2014, 11, 24));
		PedidoCliente c= new PedidoCliente("Juan", new Coordinate(15,15), new Fecha(2014, 11, 25));
		PedidoCliente d= new PedidoCliente("Ignacio", new Coordinate(10,12), new Fecha(2014, 11, 25));
		PedidoCliente e= new PedidoCliente("Javier", new Coordinate(100,150), new Fecha(2014, 11, 25));

		
		prueba.agregarPedido(a);
		prueba.agregarPedido(b);
		prueba.agregarPedido(c);
		prueba.agregarPedido(d);
		prueba.agregarPedido(e);

		
		Fecha sinNingunCliente= new Fecha(2014, 11, 26);
		
		ArrayList<PedidoCliente> pedidosFecha= prueba.damePedidosFecha(sinNingunCliente);
		
		assertEquals(1, pedidosFecha.size()); // TIENE UNO QUE ES EL PUNTO PARTIDA FACULTAD
		assertFalse(pedidosFecha.contains(a));
		assertFalse(pedidosFecha.contains(b));
		assertFalse(pedidosFecha.contains(c));
		assertFalse(pedidosFecha.contains(d));
		assertFalse(pedidosFecha.contains(e));
	}
	
	@SuppressWarnings("static-access")
	@Test
	public void testCargarTreeMap()
	{	
		Inteligencia prueba= new Inteligencia();
		
		PedidoCliente a= new PedidoCliente("Alan", new Coordinate(5,5), new Fecha(2014, 11, 24));
		PedidoCliente b= new PedidoCliente("Carlos", new Coordinate(8,8), new Fecha(2014, 11, 24));
		PedidoCliente c= new PedidoCliente("Juan", new Coordinate(15,15), new Fecha(2014, 11, 25));
		PedidoCliente d= new PedidoCliente("Ignacio", new Coordinate(10,12), new Fecha(2014, 11, 25));
		PedidoCliente e= new PedidoCliente("Javier", new Coordinate(100,150), new Fecha(2014, 11, 25));
	
		prueba.agregarPedido(a);
		prueba.agregarPedido(b);
		
		prueba.cargarTreeMap(prueba.getListaPedidos());
		TreeMap <Integer, PedidoCliente> nuevo= prueba.getIndicePedido();
		
		assertEquals(2, nuevo.size());
		assertTrue(nuevo.containsValue(a));
		assertTrue(nuevo.containsValue(b));
		assertFalse(nuevo.containsValue(c));
		assertFalse(nuevo.containsValue(d));
		assertFalse(nuevo.containsValue(e));
	}
	
	@SuppressWarnings("static-access")
	@Test
	public void testCargarTreeMap2()
	{	
		Inteligencia prueba= new Inteligencia();
		
		PedidoCliente a= new PedidoCliente("Alan", new Coordinate(5,5), new Fecha(2014, 11, 24));
		PedidoCliente b= new PedidoCliente("Carlos", new Coordinate(8,8), new Fecha(2014, 11, 24));

		prueba.agregarPedido(a);
		prueba.agregarPedido(b);
		prueba.eliminarPedido(a);
		prueba.eliminarPedido(b);
		
		
		prueba.cargarTreeMap(prueba.getListaPedidos());
		TreeMap <Integer, PedidoCliente> nuevo= prueba.getIndicePedido();
		
		assertEquals(0, nuevo.size());
		assertFalse(nuevo.containsValue(a));
		assertFalse(nuevo.containsValue(b));
	}
	
	@SuppressWarnings("static-access")
	@Test
	public void testCalcularDistancias()
	{	
		Inteligencia prueba= new Inteligencia();
		
		PedidoCliente a= new PedidoCliente("Victor", new Coordinate(5,5), new Fecha(2014, 11, 24));
		PedidoCliente b= new PedidoCliente("Carlos", new Coordinate(-20,-20), new Fecha(2014, 11, 24));
		PedidoCliente c= new PedidoCliente("Sol", new Coordinate(80,80), new Fecha(2014, 11, 25));


		prueba.agregarPedido(a);
		prueba.agregarPedido(b);	
		prueba.agregarPedido(c);


		ArrayList<Double> dist= prueba.calcularDistancias(prueba.getListaPedidos());
		
		assertEquals(9, dist.size());
		assertTrue(dist.contains(0.0));
		assertTrue(dist.contains(1.0));
		assertTrue(dist.contains(3897.9397206595027));
		assertTrue(dist.contains(0.0));
		assertTrue(dist.contains(2.0));
		assertTrue(dist.contains(9173.080919523978));
		assertTrue(dist.contains(1.0));
		assertTrue(dist.contains(2.0));
		assertTrue(dist.contains(12389.048053578605));
		
		assertFalse(dist.contains(12389));
		assertFalse(dist.contains(100.0000));
	}
}
